Micron Document
Fox's Git Mirrors


Displaying Raw • Download

.github/workflows/ci.yml 633735d797cc5f5d48cb2e22e8fd7cd743930daf (633735d7) Text, 25.08 KB

# Pinned actions (bump tag and SHA together when upgrading):
# actions/checkout@v7.0.0 9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
# actions/setup-node@v6.4.0 48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
# actions/setup-java@v4.7.1 c5195efecf7bdfc987ee8bae7a71cb8b11521c00
# vmactions/freebsd-vm@v1.5.0 5a72679103d223925653750faa878a143340fbd0
# vmactions/openbsd-vm@v1.4.5 c941015845c0f0c429676840963dc63b226d4f69
# vmactions/haiku-vm@v1.1.3 0ba6b98c8d7e5626f9defdd7403af49ad72b51df
#
name: CI

on:
push:
branches: [master, dev]
pull_request:
branches: [master, dev]

concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read
actions: read
pull-requests: read

env:
CI_GO_VERSION: "1.26.6"
CI_GO_LEGACY_WIN7_VERSION: "1.26.5-1"
CI_TASK_VERSION: "3.46.3"
CI_REVIVE_VERSION: "v1.15.0"
CI_NODE_MAJOR: "22"
CI_ODIN_VERSION: "dev-2026-06"
CI_ZIG_VERSION: "0.16.0"
CI_DART_VERSION: "3.11.4"
CI_SWIFT_VERSION: "6.0.3"
CI_KOTLIN_VERSION: "2.1.10"
GOFLAGS: -mod=vendor
GOPROXY: "off"
GOTOOLCHAIN: local
TESTSUMMARY_QUIET: "1"
RNS_REQUIRED_SIGNER: e46112d44649266d71fe2193e00a4710

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}
revive_version: ${{ env.CI_REVIVE_VERSION }}

- name: Format check
run: task fmt-check

- name: Vet
run: task vet

- name: Revive
run: task lint

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test:
name: Test (${{ matrix.os }}, ${{ matrix.goarch }})
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
goarch: amd64
- os: ubuntu-24.04-arm
goarch: arm64

steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Python venv and RNS
run: sh scripts/ci/setup-venv-pip.sh 'rns==1.4.2'

- name: Generate crossref vectors
run: task test-crossref -- generate

- name: Run binary smoke test
run: task test-binary-smoke

- name: Run self-check
run: task test-self-check

- name: Run tests
run: task test

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-os-matrix:
name: OS runtime (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 25
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest]

steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Python venv and RNS
run: sh scripts/ci/setup-venv-pip.sh 'rns==1.4.2'

- name: Generate crossref vectors
run: task test-crossref -- generate

- name: Run OS matrix tests
run: task test-os-matrix

- name: Run binary smoke test
run: task test-binary-smoke

- name: Run self-check
run: task test-self-check

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-freebsd:
name: FreeBSD self-check
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Run FreeBSD VM tests
uses: vmactions/freebsd-vm@5a72679103d223925653750faa878a143340fbd0 # v1.5.0
with:
release: "14.3"
usesh: true
prepare: |
set -eu
pkg install -y curl git
curl -fsSL -o /tmp/go.tgz https://go.dev/dl/go${{ env.CI_GO_VERSION }}.freebsd-amd64.tar.gz
rm -rf /usr/local/go
tar -C /usr/local -xzf /tmp/go.tgz
run: |
set -eu
export PATH=/usr/local/go/bin:$PATH
export GOFLAGS=-mod=vendor
export GOPROXY=off
export GOTOOLCHAIN=local
go version
go test -buildvcs=false -short -count=1 -timeout 10m ./pkg/selfcheck/ ./pkg/sandbox/ ./pkg/protect/
go test -buildvcs=false -short -count=1 -timeout 10m ./pkg/transport/ -run 'Protect|HandlePacket'
mkdir -p bin
go build -buildvcs=false -ldflags="-s -w" -o bin/reticulum-go ./cmd/reticulum-go
./bin/reticulum-go self-check --binary "$(pwd)/bin/reticulum-go" --json --full

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-openbsd:
name: OpenBSD self-check
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Run OpenBSD VM tests
uses: vmactions/openbsd-vm@c941015845c0f0c429676840963dc63b226d4f69 # v1.4.5
with:
release: "7.7"
usesh: true
prepare: |
set -eu
pkg_add -I curl
curl -fsSL -o /tmp/go.tgz https://go.dev/dl/go${{ env.CI_GO_VERSION }}.openbsd-amd64.tar.gz
rm -rf /usr/local/go
tar -C /usr/local -xzf /tmp/go.tgz
run: |
set -eu
export PATH=/usr/local/go/bin:$PATH
export GOFLAGS=-mod=vendor
export GOPROXY=off
export GOTOOLCHAIN=local
go version
go test -buildvcs=false -short -count=1 -timeout 10m ./pkg/selfcheck/ ./pkg/sandbox/ ./pkg/protect/
go test -buildvcs=false -short -count=1 -timeout 10m ./pkg/transport/ -run 'Protect|HandlePacket'
mkdir -p bin
go build -buildvcs=false -ldflags="-s -w" -o bin/reticulum-go ./cmd/reticulum-go
./bin/reticulum-go self-check --binary "$(pwd)/bin/reticulum-go" --json --full

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-haiku:
name: Haiku self-check
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Run Haiku VM tests
uses: vmactions/haiku-vm@0ba6b98c8d7e5626f9defdd7403af49ad72b51df # v1.1.3
with:
release: "r1beta5"
usesh: true
copyback: false
prepare: |
set -eu
pkgman install -y curl
curl -fsSL -o /tmp/go-bootstrap.tbz https://github.com/korli/go/releases/download/go1.26.1-haiku1/go-1.26.1-haiku-amd64-bootstrap.tbz
rm -rf /boot/home/user/go
mkdir -p /boot/home/user/go
tar -xjf /tmp/go-bootstrap.tbz -C /boot/home/user/go --strip-components=1
run: |
set -eu
export GOROOT=/boot/home/user/go
export PATH="$GOROOT/bin:$PATH"
export GOFLAGS=-mod=vendor
export GOPROXY=off
export GOTOOLCHAIN=local
export GOCACHE=/boot/home/user/.cache/go-build
mkdir -p "$GOCACHE"
go version
# Official go.mod targets a newer patch than korli Haiku Go 1.26.1.
sed -i 's/^go 1\\.26\\.[0-9][0-9]*$/go 1.26.1/' go.mod
sed -i 's/go 1\\.26\\.[2-9][0-9]*/go 1.26.1/g; s/go 1\\.26\\.[0-9][0-9][0-9]*/go 1.26.1/g' vendor/modules.txt
go test -buildvcs=false -short -count=1 -timeout 15m ./pkg/selfcheck/ ./pkg/sandbox/ ./pkg/protect/
go test -buildvcs=false -short -count=1 -timeout 10m ./pkg/transport/ -run 'Protect|HandlePacket'
mkdir -p bin
go build -buildvcs=false -ldflags="-s -w" -o bin/reticulum-go ./cmd/reticulum-go
./bin/reticulum-go self-check --binary "$(pwd)/bin/reticulum-go" --json --full

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-qemu-arch:
name: Linux ${{ matrix.goarch }} self-check (qemu-user)
runs-on: ubuntu-latest
timeout-minutes: 40
strategy:
fail-fast: false
matrix:
include:
- goarch: riscv64
qemu: qemu-riscv64-static
- goarch: "386"
qemu: qemu-i386-static
- goarch: arm
qemu: qemu-arm-static
goarm: "6"
- goarch: ppc64le
qemu: qemu-ppc64le-static
- goarch: ppc64
qemu: qemu-ppc64-static
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Install qemu-user-static
run: |
set -eu
sudo apt-get update -qq
sudo apt-get install -y qemu-user-static
command -v "${QEMU_BIN}"
"${QEMU_BIN}" --version | head -1
env:
QEMU_BIN: ${{ matrix.qemu }}

- name: Run ${{ matrix.goarch }} self-check
env:
GOARM: ${{ matrix.goarm || '' }}
GOARCH_TARGET: ${{ matrix.goarch }}
run: sh scripts/ci/run-qemu-arch-self-check.sh "${GOARCH_TARGET}"

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-odin:
name: Odin bindings
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Setup Odin
run: sh scripts/ci/setup-odin.sh "${{ env.CI_ODIN_VERSION }}"

- name: Run Odin bindings tests
run: task test-odin

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-zig:
name: Zig bindings
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Setup Zig
run: sh scripts/ci/setup-zig.sh "${{ env.CI_ZIG_VERSION }}"

- name: Run Zig bindings tests
run: task test-zig

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-cpp:
name: C++ bindings
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Install C++ toolchain
run: sudo apt-get update && sudo apt-get install -y cmake g++

- name: Run C++ bindings tests
run: task test-cpp

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-c:
name: C librns examples
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Build C ABI examples
run: task test-c

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-rust:
name: Rust bindings
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Run Rust bindings tests and examples
run: task test-rust

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-swift:
name: Swift bindings
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Setup Swift
run: sh scripts/ci/setup-swift.sh "${{ env.CI_SWIFT_VERSION }}"

- name: Run Swift bindings tests and examples
run: |
export PATH="$HOME/.local/bin:$PATH"
task test-swift

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-lua:
name: Lua bindings
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Install LuaJIT
run: sudo apt-get update && sudo apt-get install -y luajit

- name: Run Lua bindings tests and examples
run: task test-lua

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-java:
name: Java bindings
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Setup Java
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
distribution: temurin
java-version: "17"

- name: Run Java bindings tests and examples
run: task test-java

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-kotlin:
name: Kotlin bindings
runs-on: ubuntu-latest
timeout-minutes: 25
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Setup Java
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
distribution: temurin
java-version: "17"

- name: Setup Kotlin
run: sh scripts/ci/setup-kotlin.sh "${{ env.CI_KOTLIN_VERSION }}"

- name: Run Kotlin bindings tests and examples
run: |
export PATH="$HOME/.local/bin:$PATH"
task test-kotlin

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-python:
name: Python bindings
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Run Python bindings tests and examples
run: task test-python

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-dart:
name: Dart bindings
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup Dart
uses: dart-lang/setup-dart@65eb853c7ba17dde3be364c3d2858773e7144260 # v1.7.2
with:
sdk: ${{ env.CI_DART_VERSION }}

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Run Dart bindings tests
run: task test-dart

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-mutation:
name: Mutation testing
runs-on: ubuntu-latest
timeout-minutes: 50
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Run mutation tests
run: task test-mutation

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

test-extra:
name: Extra (${{ matrix.suite }})
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
suite: [race, leaks, sim, fuzz-guided, chaos, soak, bench-gate, wasm]

steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Set up Node.js
if: matrix.suite == 'wasm'
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: "${{ env.CI_NODE_MAJOR }}"

- name: Python venv and RNS
run: sh scripts/ci/setup-venv-pip.sh 'rns==1.4.2'

- name: Generate crossref vectors
run: task test-crossref -- generate

- name: Run suite
env:
SUITE: ${{ matrix.suite }}
run: |
set -euo pipefail
case "${SUITE}" in
race) task test-race ;;
leaks) task test-leaks ;;
sim) task test-sim ;;
network) task test-sim ;;
fuzz) task test-fuzz-guided ;;
fuzz-guided) task test-fuzz-guided ;;
chaos) task test-chaos ;;
soak) task test-soak && task test-soak-protect ;;
bench-gate) task test-bench-gate ;;
wasm) task test-wasm ;;
*) echo "unknown suite: ${SUITE}" >&2; exit 1 ;;
esac

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

build:
name: Build (${{ matrix.goos }}, ${{ matrix.goarch }})
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
goos: [linux, windows, darwin, freebsd]
goarch: [amd64, arm64, arm]
include:
- goos: js
goarch: wasm
exclude:
- goos: darwin
goarch: arm
- goos: windows
goarch: arm

steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
GOARM: ${{ matrix.goarch == 'arm' && '6' || '' }}
CGO_ENABLED: "0"
run: |
if [ "${{ matrix.goos }}" = "js" ] && [ "${{ matrix.goarch }}" = "wasm" ]; then
task build-wasm
else
task build
fi

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

build-windows-legacy:
name: Build (windows, ${{ matrix.goarch }}, win7)
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
goarch: [amd64, arm64]

steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Set up go-legacy-win7
run: sh scripts/ci/setup-go-legacy-win7.sh "${{ env.CI_GO_LEGACY_WIN7_VERSION }}"

- name: Setup Task
run: sh scripts/ci/setup-task.sh "${{ env.CI_TASK_VERSION }}"

- name: Build with go-legacy-win7
env:
GOOS: windows
GOARCH: ${{ matrix.goarch }}
CGO_ENABLED: "0"
run: |
set -euo pipefail
LEGACY_GO=/usr/local/go-legacy-win7/bin/go
want="go${CI_GO_LEGACY_WIN7_VERSION%-*}"
got="$("$LEGACY_GO" env GOVERSION)"
echo "go-legacy: $got (want $want)"
case "$got" in
"$want"|"$want "*) ;;
*)
echo "go-legacy version mismatch: got '$got' want '$want'" >&2
exit 1
;;
esac
mkdir -p bin
"$LEGACY_GO" build -ldflags="-s -w" \\
-o "bin/reticulum-go-windows-${{ matrix.goarch }}-win7.exe" \\
./cmd/reticulum-go

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

examples:
name: Examples (pageserver, wasm)
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Build pageserver (linux/amd64)
env:
GOOS: linux
GOARCH: amd64
CGO_ENABLED: "0"
run: |
set -euo pipefail
mkdir -p bin
cd examples/pageserver
go build -ldflags="-s -w" -o ../../bin/reticulum-go-example-pageserver-linux-amd64 .

- name: Build pageserver (linux/arm64)
env:
GOOS: linux
GOARCH: arm64
CGO_ENABLED: "0"
run: |
set -euo pipefail
cd examples/pageserver
go build -ldflags="-s -w" -o ../../bin/reticulum-go-example-pageserver-linux-arm64 .

- name: Build pageserver (linux/arm v6)
env:
GOOS: linux
GOARCH: arm
GOARM: "6"
CGO_ENABLED: "0"
run: |
set -euo pipefail
cd examples/pageserver
go build -ldflags="-s -w" -o ../../bin/reticulum-go-example-pageserver-linux-arm .

- name: Build wasm example (vendor)
env:
CGO_ENABLED: "0"
run: |
set -euo pipefail
mkdir -p bin
cd examples/wasm
GOOS=js GOARCH=wasm go build -ldflags="-s -w" -o ../../bin/reticulum-go-example-wasm.wasm .

- name: Build daemon wasm
run: task build-wasm

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

reproducibility:
name: Reproducible build
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Verify byte-identical release builds
run: task reproducibility

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

benchmark:
name: Benchmark gate
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Setup CI
uses: ./.github/actions/setup-ci
with:
go_version: ${{ env.CI_GO_VERSION }}
task_version: ${{ env.CI_TASK_VERSION }}

- name: Run benchmark thresholds
run: task test-bench-gate

- name: Verify workspace clean
uses: ./.github/actions/verify-workspace-clean

Served by rngit 1.5.2 - Generated in 0.03s